﻿#ifndef VIDEOFRAME_H
#define VIDEOFRAME_H
#include "CameraCommon/Camera_global.h"
#include <QSize>
#include <QDateTime>

extern "C" {
#include "libavutil/pixfmt.h"
}

class QMutex;

namespace Qly
{
/// 辅助类，用于 Camera 向 CameraImage 类传递数据
/// 这个类依赖于 FFMpeg 中的 AVPixelFormat。后面有可能会改变，因为有些格式 AVPixelFormat 里面没有。
/// mutex 用于线程间同步，如果 Camera 和 CameraImage 在同一个线程，可以不用这个参数
/// 实际上还有另一种情况，就是 CameraImage 收到数据后是否需要把 imgBuf 所指向的内存空间释放了。
/// 这个功能还没想好怎么处理，所以在这版代码中暂时不考虑这个问题。
struct CAMERA_EXPORT VideoFrame
{
    VideoFrame() {}
    VideoFrame(uint8_t *imgBuf, QSize size, AVPixelFormat format);
    VideoFrame(uint8_t *imgBuf, int stride, QSize size, AVPixelFormat format);
    VideoFrame(uint8_t *imgBuf, int stride, QSize size, AVPixelFormat format, QMutex *mutex);
    void setData(uint8_t *imgBuf, int stride, QSize size, AVPixelFormat format, QMutex *mutex);
    void setExtraInfo(uint32_t count, const QDateTime &t ) {frameCount = count; datetime = t;}
    AVPixelFormat format = AV_PIX_FMT_NONE;
    uint8_t *pData[4] = {nullptr, nullptr, nullptr, nullptr};
    int bytePerLine[4] = {0, 0, 0, 0};
    int width = 0;
    int height = 0;
    uint32_t frameCount = 0;
    QDateTime datetime;
    QMutex * pMutex = 0;
};

}


#endif // VIDEOFRAME_H
